#include <stdio.h>
#include <stdlib.h>

//快速排序算法调试版
int quickSort_Test(int aData[], int iLBorder, int iRBorder, int *ipHoleCount) {
	int iL = iLBorder;
	int iR = iRBorder;
	int iCount = 0; //test
	int iLen = iRBorder - iLBorder + 1; //test
	int iKey = aData[iLBorder]; //参考数为第一个坑，一般是数组第0个数据。
	printf("长度=%i\t,参考数：%i\n",iLen, iKey);

	if(iL < iR) {
		while (iL < iR) {
			//从右往左寻找小于等于iKey的数据。
			while ((iL < iR) && (aData[iR] > iKey)) {
				iR--;
				iCount++;
			}
			//找到
			if (iL < iR) {
				aData[iL] = aData[iR]; //左坑填入
				iL++; //左坑改为下一个单元。
			}

			//test
			if(iL < iR) {
				printf("L=%i(%i) <- R=%i, 找<=iKey:%i\n",iL-1, iL, iR, iKey);
				printArry(aData, iLBorder, iLen, iL, iR, iL-1, -1);
			}

			//从左往右寻找大于iKey的数据。
			while (iL < iR && aData[iL] <= iKey) {
				iL++;
				iCount++;
			}
			//找到
			if (iL < iR) {
				aData[iR] = aData[iL]; //右坑填入
				iR--; //右坑改为上一个单元。
			}

			//test
			if(iL < iR) {
				printf("L=%i -> R=%i(%i), 找>iKey:%i\n",iL, iR+1, iR, iKey);
				printArry(aData, iLBorder, iLen, iL, iR, iR+1, -1);
				printf("\n\n");
			}
		}

		//把参考数填入中间坑。
		aData[iL] = iKey;
		(*ipHoleCount)++;
		printf("--->第%i个参考数，比较了%i次，本次移动后数列：\n", *ipHoleCount, iCount);
		printArry(aData, iLBorder, iLen, -1, -1, -1, iL);
		printf("\n\n");
		//递归调用
		iCount = iCount + quickSort(aData, iLBorder, iL - 1, ipHoleCount);
		iCount = iCount + quickSort(aData, iL +1, iRBorder, ipHoleCount);
	}
	return iCount;
}

